//package com.zx.wx;
//
//import java.io.UnsupportedEncodingException;
//import java.security.MessageDigest;
//import java.security.NoSuchAlgorithmException;
//import java.util.ArrayList;
//import java.util.Arrays;
//import java.util.Formatter;
//import java.util.HashMap;
//import java.util.Iterator;
//import java.util.List;
//import java.util.Map;
//import java.util.UUID;
//
//import org.apache.log4j.Logger;
//import org.dom4j.Document;
//import org.dom4j.DocumentException;
//import org.dom4j.DocumentHelper;
//import org.dom4j.Element;
//
//import com.zx.Utils.RequestUtils;
//import com.zx.wx.utils.menuEntity.click;
//import com.zx.wx.utils.menuEntity.location_select;
//import com.zx.wx.utils.menuEntity.media_id;
//import com.zx.wx.utils.menuEntity.pic_photo_or_album;
//import com.zx.wx.utils.menuEntity.pic_sysphoto;
//import com.zx.wx.utils.menuEntity.pic_weixin;
//import com.zx.wx.utils.menuEntity.scancode_push;
//import com.zx.wx.utils.menuEntity.scancode_waitmsg;
//import com.zx.wx.utils.menuEntity.sub_button;
//import com.zx.wx.utils.menuEntity.view;
//import com.zx.wx.utils.menuEntity.view_limited;
//import com.zx.wx.wxInterface.Base;
//import com.zx.wx.wxInterface.Request;
//
//
//public class weixinUtils {
//	private static Logger logger =Logger.getLogger(weixinUtils.class);
//	
//	
//	
//	public static Map<String, String> getConfig(String appID,String appsecret,String url,Base base) {
//		String jsapi_ticket=getJsapi_ticket(appID, appsecret, base);
//		Map<String, String> ret = new HashMap<String, String>();
//		String nonce_str = UUID.randomUUID().toString();
//		String timestamp = Long.toString(System.currentTimeMillis() / 1000);
//		String string1;
//		String signature = "";
//
//		// 注意这里参数名必须全部小写，且必须有序
//		string1 = "jsapi_ticket=" + jsapi_ticket + "&noncestr=" + nonce_str + "&timestamp=" + timestamp + "&url=" + url;
//		System.out.println(string1);
//
//		try {
//			MessageDigest crypt = MessageDigest.getInstance("SHA-1");
//			crypt.reset();
//			crypt.update(string1.getBytes("UTF-8"));
//			
//			Formatter formatter = new Formatter();
//			for (byte b : crypt.digest()) {
//				formatter.format("%02x", b);
//			}
//			signature = formatter.toString();
//			formatter.close();
//		} catch (NoSuchAlgorithmException e) {
//			e.printStackTrace();
//		} catch (UnsupportedEncodingException e) {
//			e.printStackTrace();
//		}
//		ret.put("string1", string1);
//		ret.put("url", url);
//		ret.put("jsapi_ticket", jsapi_ticket);
//		ret.put("nonceStr", nonce_str);
//		ret.put("timestamp", timestamp);
//		ret.put("signature", signature);
//		return ret;
//	}
//	
//	/**
//	 *2016年7月20日15:54:10
//	 *@param access_token
//	 *@return
//	 *@note:删除自定义菜单
//	 */
//	public static String deleteMenu(String access_token){
//		String url="https://api.weixin.qq.com/cgi-bin/menu/delete?access_token="+access_token;
//		String reesult=RequestUtils.sendGet(url, "");
//		return reesult;
//	}
//	public static void main(String[] args) throws UnsupportedEncodingException {
//		String access_token="Eti2wAykuatYH7helrlfi9sW2QwWN9U33t9CSbIKqqxDJZPUxo3h2RUi-A9mB3GBZOcMNw8o48rufEZvqc9zF9uwn2wI5Ba5O8sU2-7U4mF4QjcMHUS2gIKLCvD-TiiWGSShAFAPBB";
//		System.out.println(createMenu(access_token,"sub_button"));
//	}
//	/**
//	 *2016年7月20日14:44:40
//	 *@param access_token
//	 *@return
//	 *@note:查询自定义菜单
//	 */
//	public static String selectMenu(String access_token){
//		String url="https://api.weixin.qq.com/cgi-bin/menu/get?access_token="+access_token;
//		String reesult=RequestUtils.sendGet(url, "");
//		return reesult;
//	}
//	/**
//	 *2016年7月19日 15:36:02
//	 *@param access_token
//	 *@param type
//	 *@return
//	 *@note:创建自定义菜单
//	 */
//	public static Map<String,String> createMenu(String access_token,String type) {
////		1、自定义菜单最多包括3个一级菜单，每个一级菜单最多包含5个二级菜单。
////		2、一级菜单最多4个汉字，二级菜单最多7个汉字，多出来的部分将会以“...”代替。
//		String url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=" + access_token;
//		String body = "{\"button\":#content}";
//		List<String> content=new ArrayList<>();
//		//该菜单，一级只能有一个，第二个无效。
//		List<String> sub_button_List=new ArrayList<String>();
//		switch (type) {
//			case "click": //点击推送事件
//				content.add(click.getContent("点击推送事件1号","V1001_TODAY_MUSIC"));
//				content.add(click.getContent("点击推送事件2号","V1001_TODAY_MUSIC"));
//				body=body.replace("#content", content.toString());
//				System.out.println(body);
//				break;
//			case "view": //点击跳转页面
//				content.add(view.getContent("点击跳转页面1号","http://211.149.202.130/cms/wx/accessToken.zx"));
//				content.add(view.getContent("点击跳转页面2号","http://211.149.202.130/cms/wx/accessToken.zx"));
//				body=body.replace("#content", content.toString());
//				System.out.println(body);
//				break;
//			case "scancode_push": //扫码推事件
//				//该菜单，一级只能有一个，第二个无效
//				sub_button_List.add(view.getContent("点击跳转页面3号","http://211.149.202.130/cms/wx/accessToken.zx"));
//				sub_button_List.add(view.getContent("点击跳转页面4号","http://211.149.202.130/cms/wx/accessToken.zx"));
//				content.add(scancode_push.getContent("扫码推事件1号","rselfmenu_0_1",""));
//				content.add(scancode_push.getContent("扫码推事件2号","rselfmenu_0_1",sub_button_List.toString()));
//				body=body.replace("#content", content.toString());
//				System.out.println(body);
//				break;
//			case "scancode_waitmsg": //扫码推事件且弹出“消息接收中”提示框
//				//该菜单，一级只能有一个，第二个无效。无子项
//				sub_button_List.add(view.getContent("点击跳转页面3号","http://211.149.202.130/cms/wx/accessToken.zx"));
//				sub_button_List.add(view.getContent("点击跳转页面4号","http://211.149.202.130/cms/wx/accessToken.zx"));
//				content.add(scancode_waitmsg.getContent("扫码推事件且弹出“消息接收中”提示框1号","rselfmenu_0_0",""));
//				content.add(scancode_waitmsg.getContent("扫码推事件且弹出“消息接收中”提示框2号","rselfmenu_0_0",sub_button_List.toString()));
//				body=body.replace("#content", content.toString());
//				System.out.println(body);
//				break;
//			case "pic_sysphoto"://弹出系统拍照发图(发给公众号)
//				//该菜单，一级只能有一个，第二个无效。无子项，切只认准最后一个
//				sub_button_List.add(view.getContent("跳转页面3号","http://211.149.202.130/cms/wx/accessToken.zx"));
//				sub_button_List.add(view.getContent("跳转页面4号","http://211.149.202.130/cms/wx/accessToken.zx"));
//				content.add(pic_sysphoto.getContent("拍照发图1号","rselfmenu_0_0",""));
//				content.add(pic_sysphoto.getContent("拍照发图2号","rselfmenu_0_0",sub_button_List.toString()));
//				body=body.replace("#content", content.toString());
//				System.out.println(body);
//				break;
//			case "pic_photo_or_album"://弹出拍照或者相册发图
//				//该菜单，一级只能有一个，第二个无效。无子项，切只认准第一个。
//				sub_button_List.add(view.getContent("跳转页面3号","http://211.149.202.130/cms/wx/accessToken.zx"));
//				sub_button_List.add(view.getContent("跳转页面4号","http://211.149.202.130/cms/wx/accessToken.zx"));
//				content.add(pic_photo_or_album.getContent("拍照或相册1号","rselfmenu_1_1",""));
//				content.add(pic_photo_or_album.getContent("拍照或相册2号","rselfmenu_1_1",sub_button_List.toString()));
//				body=body.replace("#content", content.toString());
//				System.out.println(body);
//				break;
//			case "pic_weixin"://弹出微信相册发图器
//				//该菜单，一级只能有一个，第二个无效。无子项，切只认准第一个。
//				sub_button_List.add(view.getContent("跳转页面3号","http://211.149.202.130/cms/wx/accessToken.zx"));
//				sub_button_List.add(view.getContent("跳转页面4号","http://211.149.202.130/cms/wx/accessToken.zx"));
//				content.add(pic_weixin.getContent("发图器1号","rselfmenu_1_1",""));
//				content.add(pic_weixin.getContent("发图器2号","rselfmenu_1_1",sub_button_List.toString()));
//				body=body.replace("#content", content.toString());
//				System.out.println(body);
//				break;
//			case "location_select"://弹出地理位置选择器，一级可以有多个无子项。
//				content.add(location_select.getContent("地理位置1号","rselfmenu_2_0"));
//				content.add(location_select.getContent("地理位置2号","rselfmenu_2_0"));
//				body=body.replace("#content", content.toString());
//				System.out.println(body);
//				break;
//			case "media_id"://下发消息（除文本消息）
//				content.add(media_id.getContent("下发消息1号","MEDIA_ID1"));
//				content.add(media_id.getContent("下发消息2号","MEDIA_ID1"));
//				body=body.replace("#content", content.toString());
//				System.out.println(body);
//				break;
//			case "view_limited"://跳转图文消息URL
//				content.add(view_limited.getContent("跳转图文消息URL1号","MEDIA_ID1"));
//				content.add(view_limited.getContent("跳转图文消息URL2号","MEDIA_ID1"));
//				body=body.replace("#content", content.toString());
//				System.out.println(body);
//				break;
//			case "sub_button"://子类菜单
//				sub_button_List.add(view.getContent("点击跳转页面1号","http://211.149.202.130/cms/wx/accessToken.zx"));
////				sub_button_List.add(view.getContent("点击跳转页面1号","http://211.149.202.130/cms/wx/accessToken.zx"));
//				content.add(sub_button.getContent("菜单1", sub_button_List.toString()));
//				content.add(sub_button.getContent("菜单2", sub_button_List.toString()));
//				body=body.replace("#content", content.toString());
//				System.out.println(body);
//				break;
//		}
//		String result=RequestUtils.sendPost(url, body);
//		return JsonToMap(result) ;
//	}
//	
//	
//	
//	
//	/**
//	 *2016年7月12日 下午2:06:42
//	 *@param access_token
//	 *@return
//	 *@note:获取所有微信服务器ip
//	 */
//	public static List<String> getIp_list(String access_token){
//		String url="https://api.weixin.qq.com/cgi-bin/getcallbackip?access_token="+access_token;
//		String result=RequestUtils.sendGet(url, "");
//		result=result.replaceAll("\"", "").replaceAll("\\{", "").replaceAll("\\}", "").split(":")[1].replace("[", "").replace("]", "");
//		String[] list=result.split(",");
//		return Arrays.asList(list);
//	} 
//	public static Map<String,String> JsonToMap(String JsonString){
//		JsonString=JsonString.replaceAll("\"", "");
//		JsonString=JsonString.replaceAll("\\{", "");
//		JsonString=JsonString.replaceAll("\\}", "");
//		String[] re=JsonString.split("\\,");
//		Map<String,String> reusltMap=new HashMap<>();
//		for(String s:re){
//			String[] slist=s.split(":");
//			reusltMap.put(slist[0], slist[1]);
//		}
//		return reusltMap;
//	} 
//	
//	@SuppressWarnings("finally")
//	public static Map<String,String> xmlToMap(String xml){
////		 String content = "<xml><URL><![CDATA[http://211.149.202.130/cms/wx]]></URL><ToUserName><![CDATA[okYfGv9twGuc-_i1aiJ4lgi5_REc]]></ToUserName><FromUserName><![CDATA[okYfGv9nc-kNIuJjNgb-VGHh1n3o]]></FromUserName><CreateTime>2016</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[sadfaasdfsfgsdgdgsfafsfafsfsafsf]]></Content><MsgId>111</MsgId></xml>";           
//	        Document document=null;
//	        Map<String,String> resultMap=new HashMap<>();
//			try {
//				document = DocumentHelper.parseText(xml);
//				Element root = document.getRootElement();  
//				for(Iterator<?> it=root.elementIterator();it.hasNext();){      
//				        Element element = (Element) it.next();
//				        resultMap.put(element.getName(), element.getText());
//				 } 
//			} catch (DocumentException e) {
//				logger.error("xmlToMap:"+e.getMessage());
//			}finally {
//				return resultMap;
//			} 
//			
//	}
//	/**
//	 * encode string
//	 *
//	 * @param str
//	 * @return String
//	 */
//	public static String encodeSHA1(String str) {
//		if (str == null) {
//			return null;
//		}
//		try {
//			MessageDigest messageDigest = MessageDigest.getInstance("SHA1");
//			messageDigest.update(str.getBytes());
//			return getFormattedText(messageDigest.digest());
//		} catch (Exception e) {
//			throw new RuntimeException(e);
//		}
//
//	}
//
//	/**
//	 * encode By MD5
//	 *
//	 * @param str
//	 * @return String
//	 */
//	public static String encodeByMD5(String str) {
//		if (str == null) {
//			return null;
//		}
//		try {
//			MessageDigest messageDigest = MessageDigest.getInstance("MD5");
//			messageDigest.update(str.getBytes());
//			return (messageDigest.digest());
//		} catch (Exception e) {
//			throw new RuntimeException(e);
//		}
//
//	}
//	/**
//	 * Takes the raw bytes from the digest and formats them correct.
//	 *
//	 * @param bytes
//	 *            the raw bytes from the digest.
//	 * @return the formatted bytes.
//	 */
//	private static final char[] HEX_DIGITS = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
//	private static String getFormattedText(byte[] bytes) {
//		int len = bytes.length;
//		StringBuilder buf = new StringBuilder(len * 2);
//		// 把密文转换成十六进制的字符串形式
//		for (int j = 0; j < len; j++) {
//			buf.append(HEX_DIGITS[(bytes[j] >> 4) & 0x0f]);
//			buf.append(HEX_DIGITS[bytes[j] & 0x0f]);
//		}
//		return buf.toString();
//	}
//}
